Test Each File
Easily generate tests for files in a specified directory for comprehensive testing.
A simple example of the macro is shown below:
test_each_file!
Given the following file structure:
- resources
- a.txt
- b.txt
- extra
- c.txt
- src
- main.rs
The macro expands to:
Generate submodule
The tests can automatically be inserted into a module, by using the as
keyword. For example:
test_each_file!
This will wrap the tests above in an additional mod example { ... }
.
This feature is useful when test_each_file!
is used multiple times in a single file, to prevent that the generated
tests have the same name.
File grouping
Sometimes it may be preferable to write a test that takes the contents of multiple files as input.
A common use-case for this is testing a function that performs a transformation from a given input (.in
file) to an
output (.out
file).
test_each_file!
Both the .in
and .out
files must exist and be located in the same directory, as demonstrated below:
- resources
- a.in
- a.out
- b.in
- b.out
- extra
- c.in
- c.out
- src
- main.rs
Note that .in
and .out
are just examples here - any number of unique extensions can be given of arbitrary types.
Test each path
A similar macro exists for passing all the paths in a given directory. This macro behaves identically to test_each_file!
,
except that it passes the paths of the files rather than the contents. It is usually preferable to use test_each_file!
,
because it includes the files in the binary, whereas the paths still need to be there during run-time for test_each_path!
.
test_each_path!
More examples
The expression that is called on each file can also be a closure, for example:
test_each_file!
All the options above can be combined, for example:
test_each_file!